
// ./thrift-0.10.0.exe --gen java -out ./java/ ./gathering.thrift
namespace java com.quanyan.platform.thrift.gathering
namespace cpp com.quanyan.es.gathering
namespace go com.quanyan.user.thrift.gathering
namespace py thrift.gathering

const string VERSION = "1.0.0"

//运动类型不用枚举了，直接约定用32位整形表示
//enum SportType {
//    ST_BASKETBALL = 1,  //1篮球
//    ST_BADMINTON,       //2羽毛球
//    ST_FOOTBALL,        //3足球
//    ST_TENNIS,          //4网球
//}

struct RespCommon {
    1: i32 code
    2: string desc
}

//通过经纬度请求获取附近圈子信息
struct ReqNearbyCircles {
    1: double longitude     //经度
    2: double latitude      //纬度
    3: i32 sportType        //运动类型 1篮球 2羽毛球 3足球 4网球
    4: i32 pageNo           //第几页(与perPage成对出现或缺失)
    5: i32 perPage          //每页几个结果
    6: i32 uid              //uid（ES可能需要这个uid做推荐或数据分析）
    7: i32 radius           //搜索半径，单位：米
    8: i32 cityID           //城市ID
}

//圈子项
struct CircleItem {
    1: string circleName    //圈子名
    2: i32 circleID         //圈子ID
    3: i32 sportType        //运动类型 1篮球 2羽毛球 3足球 4网球
    4: i32 stadiumNum       //场馆数目
    5: i32 clubNum          //俱乐部数目
    6: i32 activityNum      //活动数目
    7: double longitude         //场馆经度
    8: double latitude          //场馆纬度
    9: i32 distance         //距离（单位：米）
}



//通过circleID来获取单个圈子信息
//注意：
// 1. circleID不唯一，需要与运动类型组合才唯一
// 2. circleID从0开始

struct ReqCircleItem{
    1: i32 circleID         //圈子ID
    2: i32 sportType        //运动类型
}

struct ReqCircleInfoByID {
    1: ReqCircleItem reqCircle //圈子请求项
    2: i32 uid              //用户uid，其中<=0的uid无效
}

//通过circleID来获取单个圈子信息的返回
struct RespCircleInfo {
    1: RespCommon common
    2: CircleItem item
}

//批量根据circleID获取圈子信息
struct ReqCircleInfosByIDs {
    1: list<ReqCircleItem> reqCircles  //圈子请求项列表
    2: i32 uid              //用户uid
}

//批量根据circleID获取圈子信息
struct RespCircleInfos {
    1: RespCommon common
    2: list<CircleItem> items
}




//请求获取圈子附近场馆信息
struct ReqNearbyStadiums {
    1: i32 circleID             //圈子ID
    2: i32 sportType            //运动类型 1篮球 2羽毛球 3足球 4网球
    3: double longitude         //用户坐标经度
    4: double latitude          //用户坐标纬度
    5: i32 uid                  //uid（可选，ES可能需要这个uid做推荐或数据分析）
    6: i32 stadiumType          //场馆筛选：1自营 2非自营 3都可以
}

//场馆项
struct StadiumItem {
    1: string stadiumName       //场馆名字
    2: i32 stadiumID            //场馆ID
    3: i32 clubNum              //俱乐部数目
    4: i32 activityNum          //活动数目
    5: i32 matchNum             //未开始的比赛数目
    6: double longitude         //场馆经度
    7: double latitude          //场馆纬度
	8: string address			//场馆地址
	9: i32 distance             //距离
	10: i32 follow              //是否关注/收藏了该场馆(0否1是)
}

//请求获取圈子附近场馆信息接口的返回
struct RespNearbyStadiums {
    1: RespCommon common
    2: list<StadiumItem> items;
}

//请求获取圈子附近俱乐部信息
struct ReqNearbyClubs {
    1: i32 circleID             //圈子ID
    2: i32 sportType            //运动类型 1篮球 2羽毛球 3足球 4网球
    3: double longitude         //用户坐标经度
    4: double latitude          //用户坐标纬度
    5: i32 uid                  //uid（可选，ES可能需要这个uid做推荐或数据分析）
}

//俱乐部项
struct ClubItem {
    1: string clubName          //俱乐部名字
    2: i32 clubID               //俱乐部ID
    3: i32 memberNum            //成员数
    4: string stadiumName       //所属场馆名
    5: double longitude         //场馆经度
    6: double latitude          //场馆纬度
    7: string address           //地址（实际取场馆地址）
    8: string caption           //公告
    9: string url               //俱乐部图片链接
    10: i32 distance            //距离
    11: i32 isMember            //是否是俱乐部成员
}

//请求获取圈子附近俱乐部信息接口的返回
struct RespNearbyClubs {
    1: RespCommon common
    2: list<ClubItem> items
}

//请求获取圈子附近活动信息
struct ReqNearbyActivities {
    1: i32 circleID             //圈子ID
    2: i32 sportType            //运动类型 1篮球 2羽毛球 3足球 4网球
    3: double longitude         //经度
    4: double latitude          //纬度
    5: i32 uid         //uid（可选，ES可能需要这个uid做推荐或数据分析）
}

//活动项
struct ActivityItem {
    1: string activityName      //活动名称
    2: i32 activityID           //活动ID
    3: list<string> tags        //标签
    4: i32 activityTime         //活动开始时间（unix时间戳）
    5: i32 pricePerCapita       //人均价格（元）
    6: string stadiumName       //场馆名
    7: double longitude         //场馆经度
    8: double latitude          //场馆纬度
    9: string address           //地址（实际取场馆地址）
    10: string caption          //公告
    11: i32 distance            //距离
}

//请求获取圈子附近活动信息接口的返回
struct RespNearbyActivities {
    1: RespCommon common
    2: list<ActivityItem> items
}




service GatheringService{

    void ping();

    //通过circleID来获取单个圈子信息
    RespCircleInfo getCircleInfoByID(1:ReqCircleInfoByID req);

    //获取附近圈子信息
    RespCircleInfos getNearbyCircles(1:ReqNearbyCircles req);

    //批量通过circleID来获取单个圈子信息
    RespCircleInfos getCircleInfosByIDs(1:ReqCircleInfosByIDs req);

//    //通过关键字等信息来搜索附近圈子
//    RespCircleInfos getCircleInfosByWords(1:ReqQueryCircles req);

    //获取某圈子附近场馆信息
    RespNearbyStadiums getNearbyStadiums(1:ReqNearbyStadiums req);

    //获取某圈子附近俱乐部信息
    RespNearbyClubs getNearbyClubs(1:ReqNearbyClubs req);

    //获取某圈子附近的活动信息
    RespNearbyActivities getNearbyActivities(1:ReqNearbyActivities req);

}